#pragma once

#include <ros/service_traits.h>

#include "@PROTO_H@Request.h"
#include "@PROTO_H@Response.h"

namespace @Package@{
    struct @PROTO_H@
    {
        typedef @PROTO_H@Request Request;
        typedef @PROTO_H@Response Response;
        Request request;
        Response response;

        typedef Request RequestType;
        typedef Response ResponseType;
    }; // struct @PROTO_H@
} // namespace @Package@


namespace ros{
namespace service_traits{
    template<>
    struct MD5Sum< @Package@::@PROTO_H@ > {
        static const char* value()
        {
            return "@Checksum@";
        }

        static const char* value(const @Package@::@PROTO_H@&) { return value(); }
    };

    template<>
    struct DataType< @Package@::@PROTO_H@ > {
        static const char* value()
        {
            return "@Package@/@PROTO_H@";
        }

        static const char* value(const @Package@::@PROTO_H@&) { return value(); }
    };

    template<>
    struct MD5Sum< @Package@::@PROTO_H@Request>
    {
        static const char* value()
        {
            return MD5Sum< @Package@::@PROTO_H@ >::value();
        }

        static const char* value(const @Package@::@PROTO_H@Request&)
        {
            return value();
        }
    };

    template<>
    struct DataType< @Package@::@PROTO_H@Request>
    {
        static const char* value()
        {
            return DataType< @Package@::@PROTO_H@ >::value();
        }
        static const char* value(const @Package@::@PROTO_H@Request&)
        {
            return value();
        }
    };

    template<>
    struct MD5Sum< @Package@::@PROTO_H@Response>
    {
        static const char* value()
        {
            return MD5Sum< @Package@::@PROTO_H@ >::value();
        }
        static const char* value(const @Package@::@PROTO_H@Response&)
        {
            return value();
        }
    };

    template<>
    struct DataType< @Package@::@PROTO_H@Response>
    {
        static const char* value()
        {
            return DataType< @Package@::@PROTO_H@ >::value();
        }
        static const char* value(const @Package@::@PROTO_H@Response&)
        {
            return value();
        }   
    };
} // namespace service_traits
} // namespace ros
